// 引入axios的核心库以及一些规则定义方法
import axios, { AxiosInstance, AxiosResponse, AxiosRequestConfig } from 'axios'
// 引入自定义的数据接口
import { ResultData } from './interface'

// 封装配置方法
let config = {
    // 基础地址
    baseURL: '/api'
}

// 封装一个请求类 这个类中包含了拦截器  包含了get/post方法
class HttpRequest {
    // 创建一个http的属性  代表的就是axios
    http: AxiosInstance
    constructor(config: AxiosRequestConfig) {
        this.http = axios.create(config)
        // 请求拦截器
        this.http.interceptors.request.use(req => {
            // req  代表的就是请求参数
            // 进行token验证
            return req
        })
        // 响应拦截器
        this.http.interceptors.response.use(res => {
            // 全局拦截错误以及数据响应
            return res.data
        })
    }
    /*
       封装get方法
       url
       params
    */
    get<T>(url: string, params?: object): Promise<ResultData<T>> {
        return this.http.get(url, { params })
    }


    /*
       封装post方法
    */
    post<T>(url: string, params?: object): Promise<ResultData<T>> {
        return this.http.post(url, params)
    }
}

// 导出封装好的类
export default new HttpRequest(config)